import { toast } from "@/utils/util";
import { sharePlatform } from "@/common/globalConfig";

// 不同场景中的一些必传字段判断
function verifyParams(shareParams: UniNamespace.ShareOptions) {
  if (!shareParams.scene) {
    toast("必须选择一个微信场景");
    return false;
  }
  let isLegal = true;
  switch (shareParams.type) {
    case 0:
      if (!shareParams.href || !shareParams.imageUrl) {
        toast("跳转链接不能为空");
        isLegal = false;
      }

      break;
    case 1:
      if (!shareParams.href) {
        toast("跳转链接不能为空");
        isLegal = false;
      }
      break;
    case 2:
      if (!shareParams.imageUrl) {
        toast("图片地址不能为空");
        isLegal = false;
      }
      break;
    case 3:
      if (!shareParams.mediaUrl) {
        toast("音视频地址不能为空");
        isLegal = false;
      }
      break;
    case 4:
      if (!shareParams.mediaUrl) {
        toast("音视频地址不能为空");
        isLegal = false;
      }
      break;
    case 5:
      if (!shareParams.imageUrl || !shareParams.miniProgram) {
        toast("图片地址不能为空");
        isLegal = false;
      }

      break;
    default:
      break;
  }
  return isLegal;
}

/*
type：分享到那个平台 "sinaweibo" | "weixin"
shareParams 分享的配置参数
provider	String	weixin|qq|sinaweibo，
type	Number	否	分享形式，如图文、纯文字、纯图片、音乐、视频、小程序等。默认图文 0。
   0	图文	weixin、sinaweibo
   1	纯文字	weixin、qq
   2	纯图片	weixin、qq
   3	音乐	weixin、qq
   4	视频	weixin、sinaweibo
   5	小程序	weixin
	 
title	String	否	分享内容的标题
scene	String	provider 为 weixin 时必选	场景
    WXSceneSession	分享到聊天界面
    WXSceneTimeline	分享到朋友圈
    WXSceneFavorite	分享到微信收藏
		
summary	String	type 为 1 时必选	分享内容的摘要
href	String	type 为 0 时必选	跳转链接
imageUrl	String	type 为 0、2、5 时必选	图片地址。type为0时，推荐使用小于20Kb的图片
mediaUrl	String	type 为 3、4 时必选	音视频地址
miniProgram	Object	type 为 5 时必选	分享小程序必要参数
*/
function share(type: "sinaweibo" | "weixin", shareParams: UniNamespace.ShareOptions) {
  return new Promise((resolve, reject) => {
    checkInstalledApps(type).then(() => {
      if (!verifyParams(shareParams)) {
        return;
      }
      uni.share({
        ...shareParams,
        success: function (res) {
          console.log("success:" + JSON.stringify(res));
          resolve(res);
        },
        fail: function (err) {
          console.log("fail:" + JSON.stringify(err));
          reject(err);
        }
      });
    });
  });
}

// 判断是否已经安装某个应用
function checkInstalledApps(type: "sinaweibo" | "weixin") {
  return new Promise((resolve, reject) => {
    uni.getProvider({
      service: "share",
      success: (res: UniApp.GetProviderRes) => {
        if (Array.isArray(res.provider) && res.provider.includes(type)) {
          // 手机已安装微信客户端，执行相应的操作
          resolve(res);
        } else {
          // 手机未安装微信客户端，执行相应的操作
          reject(`手机未安装${sharePlatform[type]}客户端，请安装后再进行分享`);
        }
      },
      fail: (error) => {
        reject(error);
      }
    });
  });
}
export default {
  checkInstalledApps,
  share
};
